﻿using TaskManagerLib.Symbol;

namespace TaskManagerLib.MinimumWork;

public interface IMiniWork<T>
{
    public const int Success = 1;
    public const int NotSuccess = 0;
    // 任务执行进度
    public double Progress
    {
        get;
        set;
    }
    // 任务执行情况通知回调
    public ProgressDelegate? Notification
    {
        get;
        set;
    }
    // 任务的状态
    public WorkStatus? Status
    {
        get;
        set;
    }

    // 用于暂停工作的执行
    public CancellationTokenSource? CancellationTokenSource
    {
        get;
        set;
    }
    // 内部工作
    public Task<int>? InnerTask
    {
        get;
        set;
    }


    // 任务是否完成
    public bool IsFinished();

    // 结果的类型
    public Type? ResultType
    {
        get;
    }
    // 执行结果
    public T? Result
    {
        get;
    }

    // 用于描述执行结果
    public string? ResultDescription
    {
        get;
        set;
    }


    // 开始异步执行
    public void Start();

    // 异步阻塞执行直到任务执行完毕或者暂停/取消
    public Task StartAndBlockAsync();
    // 构建要执行的任务
    public void Build();
    // 检查是否出现状态丢失
    public Task<bool> Checkout();

    public Task BuildContinuesTask();
    // 恢复到任务构建好地状态
    public bool Resume(CancellationTokenSource cancellationTokenSource);
    // 是否可以暂停
    public bool CanBePaused();
    // 是否可以暂停，并且再次运行时不会丢失任何数据
    public bool CanPausedAndRunWithoutInformationLost();
    // 是否可以重新运行，基本都可以重新运行
    public bool CanReRun();
    public bool UseRecoverAction();
    public Task Action();
    // 不是必要的，提供额外的选项，如果Action不能恢复，使用该函数重新构建
    public Task RecoverAction();
}
